module.exports = (options = { required: true }) => {
  return async (ctx, next) => {
    // 获取请求头中的 token 数据
    let token = ctx.headers['authorization']
    token = token
      ? token.split('Bearer ')[1]
      : null

    if (options.required && !token) {
      return ctx.throw(401, 'token 无效，请重新登陆')
    }

    ctx.token = token
    
    try {
      const data = await ctx.service.user.verifyToken(token)
      ctx.user = await ctx.service.user.findById(data.userId) 
    } catch (err) {
      return ctx.throw(401)
    }
     await next()
  };
};